var ply; //记录区域绘制图形
var line; //记录每次的线
var centerLabel; //记录中心点
var markPointList = []; //记录折线交点坐标

//添加点
function Addpoint(point) {
	//添加标记点
	var label = new BMap.Marker(point); // 创建文本标注对象		
	map.addOverlay(label);
}
//绘制完成重新截取折线
function CutLine() {
	var pointList = [];
	for (var i = 0; i < line.getPath().length - 1; i++) {
		var isOnpolygon = BMapLib.GeoUtils.isPointInPolygon(line.getPath()[i], ply); //保证点在多边形
		if (isOnpolygon) {
			pointList.push(line.getPath()[i]);
		}
	}
	var pointData = pointList.concat(markPointList);
	//删除原先的折线重新创建
	map.removeOverlay(line);
	var polyline = new BMap.Polyline(pointData, styleOptions);
	map.addOverlay(polyline);
	line = polyline;
	markPointList = [];
}

// 拾取坐标的通用方法
function AddOrRemove(e) {
	var opts = {
		position: e.point, // 指定文本标注所在的地理位置
		offset: new BMap.Size(-30, -5) //设置文本偏移量
	}
	var label = new BMap.Label("区域中心点", opts); // 创建文本标注对象
	label.setStyle({
		color: "red",
		fontSize: "12px",
		height: "20px",
		lineHeight: "20px",
		fontFamily: "微软雅黑",
		border: "0px",
		backgroundColor: ""
	});
	map.removeOverlay(centerLabel);
	map.addOverlay(label);
	centerLabel = label;
}
//设置中心点
function SetCenter() {
	//单击获取点击的经纬度
	map.addEventListener("click", AddOrRemove);
}
//保存中心点
function SaveCenter() {
	map.removeEventListener("click", AddOrRemove);
}




/**********百度地图初始化业务************/

// 百度地图API功能
var map = new BMap.Map("allmap");
map.centerAndZoom(new BMap.Point(116.403765, 39.914850), 5);
map.enableScrollWheelZoom();
//显示规定区域边界
function getBoundary() {
	var bdary = new BMap.Boundary();
	bdary.get("济南", function(rs) { //获取行政区域
		map.clearOverlays(); //清除地图覆盖物       
		var count = rs.boundaries.length; //行政区域的点有多少个
		if (count === 0) {
			alert('未能获取当前输入行政区域');
			return;
		}
		var pointArray = [];
		for (var i = 0; i < count; i++) {
			ply = new BMap.Polygon(rs.boundaries[i], {
				strokeWeight: 2,
				strokeColor: "#ff0000"
			}); //建立多边形覆盖物
			map.addOverlay(ply); //添加覆盖物
			pointArray = pointArray.concat(ply.getPath());
		}
		map.setViewport(pointArray); //调整视野                
	});
}
setTimeout(function() {
	getBoundary();
}, 1000);
//回调获得覆盖物信息
var overlays = [];
var overlaycomplete = function(e) {
	overlays.push(e.overlay);

	var result; //记录覆盖物数量
	if (e.drawingMode == BMAP_DRAWING_MARKER) {
		//开启拖拽
		e.overlay.enableDragging();
		result = ' 坐标：' + e.overlay.getPosition().lng + ',' + e.overlay.getPosition().lat;
		console.log(line.getPath())
	}
	if (e.drawingMode == BMAP_DRAWING_POLYLINE || e.drawingMode == BMAP_DRAWING_POLYGON || e.drawingMode ==
		BMAP_DRAWING_RECTANGLE) {
		line = e.overlay;
		//开启多边形编辑
		//e.overlay.enableEditing();
		//result += ' 所画的点个数：' + e.overlay.getPath().length;
		result = e.overlay.getPath();
		//判断折线与多边形的所有交点
		//折线的点数
		var piontNub = 0; //记录相交的点数
		for (var i = 0; i < e.overlay.getPath().length - 1; i++) {
			var lineA = e.overlay.getPath()[i];
			var lineB = e.overlay.getPath()[i + 1];
			for (var j = 0; j < ply.getPath().length - 2; j++) {
				var plyA = ply.getPath()[j];
				var plyB = ply.getPath()[j + 1];
				var flagPoint = segmentsIntr(lineA, lineB, plyA, plyB);
				if (flagPoint != false) {
					piontNub++;
					Addpoint(flagPoint);
					markPointList.push(new BMap.Point(flagPoint.lng, flagPoint.lat));
				}
			}
		}
		//判断位置
		if (piontNub < 2) {
			markPointList = [];
			map.removeOverlay(e.overlay);
			alert("相交点数小于2")
		}
	}
	console.log("所画的点")
	console.log(result) //将绘制的覆盖物信息结果输出到结果面板
};

//实例化鼠标绘制工具
var styleOptions = {
	strokeColor: "red", //边线颜色。
	fillColor: "red", //填充颜色。当参数为空时，圆形将没有填充效果。
	strokeWeight: 2, //边线的宽度，以像素为单位。
	strokeOpacity: 0, //边线透明度，取值范围0 - 1。
	fillOpacity: 0.6, //填充的透明度，取值范围0 - 1。
	strokeStyle: 'solid', //边线的样式，solid或dashed。
}
var drawingManager = new BMapLib.DrawingManager(map, {
	isOpen: false, //是否开启绘制模式
	enableDrawingTool: true, //是否显示工具栏
	drawingToolOptions: {
		anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
		offset: new BMap.Size(5, 5), //偏离值
		scale: 0.8, //工具栏缩放比例
		drawingModes: [BMAP_DRAWING_POLYLINE]
	},
	polylineOptions: styleOptions, //线的样式

});
//添加鼠标绘制工具监听事件，用于获取绘制结果
drawingManager.addEventListener('overlaycomplete', overlaycomplete);
